import { ElMessage } from 'element-plus'
import { getAuthConfig } from '@/config/auth.config'

// 获取统一认证配置
const authConfig = getAuthConfig()

// 使用统一配置中的常量
const TOKEN_KEY = authConfig.TOKEN_KEY
const USER_INFO_KEY = authConfig.USER_INFO_KEY
const TOKEN_EXPIRE_KEY = authConfig.TOKEN_EXPIRE_KEY
const TOKEN_TIMEOUT = authConfig.TOKEN_TIMEOUT

/**
 * 存储token到本地存储
 * @param {string} token - 认证令牌
 */
export function setToken(token) {
  localStorage.setItem(TOKEN_KEY, token)

  // 设置token过期时间
  const expireTime = new Date().getTime() + TOKEN_TIMEOUT
  localStorage.setItem(TOKEN_EXPIRE_KEY, expireTime.toString())
}

/**
 * 从本地存储获取token
 * @returns {string|null} - 认证令牌或null
 */
export function getToken() {
  return localStorage.getItem(TOKEN_KEY)
}

/**
 * 清除本地存储中的token
 */
export function removeToken() {
  localStorage.removeItem(TOKEN_KEY)
  localStorage.removeItem(TOKEN_EXPIRE_KEY)
}

/**
 * 存储用户信息到本地存储
 * @param {Object} userInfo - 用户信息对象
 */
export function setUserInfo(userInfo) {
  localStorage.setItem(USER_INFO_KEY, JSON.stringify(userInfo))
}

/**
 * 从本地存储获取用户信息
 * @returns {Object|null} - 用户信息对象或null
 */
export function getUserInfo() {
  const userInfo = localStorage.getItem(USER_INFO_KEY)
  return userInfo ? JSON.parse(userInfo) : null
}

/**
 * 清除本地存储中的用户信息
 */
export function removeUserInfo() {
  localStorage.removeItem(USER_INFO_KEY)
}

/**
 * 清除所有认证相关信息
 */
export function clearAuth() {
  removeToken()
  removeUserInfo()
}

/**
 * 检查token是否已过期
 * @returns {boolean} - 如果token已过期则返回true，否则返回false
 */
export function isTokenExpired() {
  const expireTime = localStorage.getItem(TOKEN_EXPIRE_KEY)
  if (!expireTime) return true

  return new Date().getTime() > parseInt(expireTime)
}

/**
 * 刷新token过期时间
 */
export function refreshTokenExpire() {
  const expireTime = new Date().getTime() + TOKEN_TIMEOUT
  localStorage.setItem(TOKEN_EXPIRE_KEY, expireTime.toString())
}

/**
 * 检查是否已登录
 * @returns {boolean} - 如果已登录则返回true，否则返回false
 */
export function isLoggedIn() {
  const token = getToken()
  if (!token) return false

  // 检查token是否过期
  if (isTokenExpired()) {
    clearAuth()
    ElMessage.error('登录已过期，请重新登录')
    return false
  }

  return true
}
